package main

import "fmt"

type Cat struct {
}

func (c *Cat) Eat() {
	fmt.Println("小猫吃饭...")
}

// 使用继承的方式给小猫添加一个睡觉的功能
// CatB 给小马加个睡觉的功能
type CatB struct {
	Cat
}

func (cb *CatB) Sleep() {
	fmt.Println("小猫睡觉...")
}

// 使用组合的方式给小猫添加一个睡觉的功能
type Catc struct {
	C *Cat
}

func (cc *Catc) Eat() {
	cc.Eat()
}

func (cc *Catc) Sleep() {
	fmt.Println("小猫睡觉...")
}

func main() {
	c := Cat{}
	c.Eat()

	//使用继承
	fmt.Println("............")
	cb := CatB{}
	cb.Eat()
	cb.Sleep()

	//使用组合
	fmt.Println("组合方式.....")
	cc := Catc{}
	cc.Eat()
	cc.Sleep()
}
